package xutil

import (
	"fmt"
	"time"

	"github.com/robfig/cron/v3"
)

type S定时任务 struct {
	C *cron.Cron
}

func F新建定时任务() *S定时任务 {
	return &S定时任务{
		C: cron.New(),
	}
}

/*
	 func aa() {
		// 新建一个定时任务对象,根据cron表达式进行时间调度,cron可以精确到秒,大部分表达式格式也是从秒开始
		// 默认从分开始进行时间调度
		// cronTab := cron.New()
		// 精确到秒
		cronTab := cron.New(cron.WithSeconds())
		// 定义定时器调用的任务函数
		task := func() {
			fmt.Println("hello world", time.Now())
		}
		// 定时任务,cron表达式,每五秒一次
		spec := `* /5 * * * * ?`
		// 添加定时任务
		cronTab.AddFunc(spec, task)
		// 启动定时器
		cronTab.Start()
		// 阻塞主线程停止
		select {}
	}
*/
func (a *S定时任务) F添加任务(spec string, task func()) (cron.EntryID, error) {
	return a.C.AddFunc(spec, task)
}

func (a *S定时任务) F添加每天此时(task func()) (cron.EntryID, error) {
	spec := a.F获取当前第几分钟()
	return a.C.AddFunc(spec, task)
}

func (a *S定时任务) F获取当前第几分钟() string {
	now := time.Now()
	// 获取时分秒
	hours := now.Hour()
	minutes := now.Minute()
	return fmt.Sprintf("%v %v * * *", minutes, hours)
}

func (a *S定时任务) F开启() {
	a.C.Start()
	// 阻塞主线程停止
	select {}
}
